package com.yx.changdao.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yx.changdao.common.entity.SysPermission;
import com.yx.changdao.common.entity.SysRole;
import com.yx.changdao.common.entity.SysUser;
import com.yx.changdao.common.entity.SysUserRole;
import com.yx.changdao.common.exception.AlertException;

import java.util.List;

/**
 * @Title: SysUserRoleService
 * @Description: 系统用户角色服务。
 * @Auther: Zhangjiashun
 * @Version: 1.0
 * @create 2019/11/6 11:56
 */
public interface SysUserRoleService extends IService<SysUserRole> {

    /**
     * 添加用户角色
     *
     * @param user 用户
     * @param role 角色
     * @return 用户角色
     */
    SysUserRole addUserRole(SysUser user, SysRole role) throws AlertException;

    /**
     * 添加用户角色
     *
     * @param userId 用户id
     * @param roleId 角色id
     * @return 用户角色
     */
    SysUserRole addUserRole(String userId, String roleId) throws AlertException;

    /**
     * 获取用户角色列表
     *
     * @param userId 用户id
     * @return 角色列表
     */
    List<SysRole> getUserRoles(String userId);


    /**
     * 获取用户角色列表
     *
     * @param userId 用户id
     * @return 角色id列表
     */
    List<String> getUserRoleIds(String userId);

    /**
     * 获取用户权限列表
     *
     * @param userId 用户id
     * @return 用户拥有的权限id列表
     */
    List<String> getUserPermissionIds(String userId);

    /**
     * 获取用户权限列表
     *
     * @param userId 用户id
     * @return 用户拥有的权限列表
     */
    List<SysPermission> getUserPermissions(String userId);

    /**
     * 删除用户权限
     *
     * @param userId 用户id
     * @param roleId 角色id
     * @return 是否删除成功
     */
    Boolean delUserPermission(String userId, String roleId);

    /**
     * 删除用户权限
     *
     * @param userRole 用户角色
     * @return 是否删除成功
     */
    Boolean delUserPermission(SysUserRole userRole);

    /**
     * 删除用户权限
     *
     * @param user 用户
     * @return 是否删除成功
     */
    Boolean delUserAllPermission(SysUser user);

    /**
     * 删除用户所有权限
     *
     * @param userId 用户id
     * @return 是否删除成功
     */
    Boolean delUserAllPermission(String userId);
}
